//main 函数保存在名为 main 的包里。如果 main 函数不在 main 包里，构建工具就不会生成可执行的文件
package main

import (
	"fmt"
	"log"
	"os"
)

//在main之前运行
func init() {
	//将日志标准化输出
	log.SetOutput(os.Stdout)
}

type DataDemo struct {
	id string
}

// SetId 用值来作为方法的接受者时，这里的receiver是原值的拷贝
func (receiver DataDemo) SetId(id string) {
	fmt.Printf("receiver1 p=%p\n", &receiver)
	receiver.id = id
}

// SetIdp 使用指针来接受方法时，使用的是原值的指针，没有进行拷贝
func (receiver *DataDemo) SetIdp(id string) {
	fmt.Printf("receiver2 p=%p\n", receiver)
	receiver.id = id
}

//声明的名为 main 的函数。
//构建程序在构建可执行文件时，需要找到这个已经声明的 main 函数，把它作为程序的入口
func main() {
	//调用了 search 包里的 Run 函数
	//search.Run("president")
	a := DataDemo{}
	fmt.Printf("a 的指针为 %p , 值为：%s\n", &a, a)
	a.SetId("1234\n")
	fmt.Printf("%s\n", a)

	a.SetIdp("321")
	fmt.Printf("%s", a)

}
